# _*_ utf-8 _*_

""""
在python 中不需要向Java中那样必须明确的指出数据类型
python3中有6个标准的数据类型
数字类型：Number
字符串类型：String
元组类型：Tuple      这三个数据类型属于不可变的数据类型

列表类型：list
集合类型：Set
字典类型：Dictionary  这三个属于可变数据类型

可变与不可变说的是存放某个元素的数据类型。在改变这个元素的时候，指向这个元素类型的地址是否发生改变。

"""
#
# num1, num2 = 1245, 123.234
# print("num1= ", num1, ",num2=", num2)
#
# num3 = 110

# eval是一个非常重要的函数，能识别字符串中的数学运算，在js的学习中也会遇见。
# phone = eval(input("请输入一个号码："))
# print("喂，", phone + 9, "吗？我是", phone)


# 演示数据类型的不可变性
# num1 = 1024
#
# print("num1 的内存地址为：", id(num1), ",num1的值为：", num1)

# 注意到现在这两个地方的内存地址不一样

# num1 = 2048
# print("num1 的内存地址为：", id(num1), ",num1的值为：", num1)

# 感受一下eval函数处理数学表达式
# 使用eval函数需要注意处理的字符串数学表达式使用单引号
# PI = 3.1415926
# str1 = '2.5 ** 2 * PI'
# 这里也可以控制输出的格式，可以体验一下初级使用格式化输出
# print("半径为2.5的圆的面积为：{:.2f}".format(eval(str1)))

# 在python中交换两个数字，不同于Java c c++
# num1, num2 = 10, 20
# print("交换前")
# print("num1 = ", num1, "num2 = ", num2)
#
# num1, num2 = num2, num1
# print("交换后：")
# print("num1 = ", num1, "num2 = ", num2)

# 使用type查看变量的类型

str1 = "字符串"
print("str1的类型：", type(str1))

# tuple 元组式例，通常用来表示坐标
beaut_point = (10, 2, 34, 55)
print("第一个点的坐标：", beaut_point[0])

# list 列表
list1 = [1, 22, "342", 2.234, beaut_point]
# list1.append("添加新元素")
print(list1)

# Set 集合类型
set1 = {"字符串类型", 1.22, 2, beaut_point}

set1.add('添加新元素')
# 无法在集合列表中添加list列表
# set1.add(list1)

print(set1)

# 尝试在list列表中添加集合类型
# 能够正常执行，说明可以在列表中添加Set集合对象
# list1.append(set1)
#
# print(list1)

# 字典对象
actor = {
    "姓名": "赵丽颖",
    "性别": "女",
    "年龄": "18"
}

print(actor["姓名"], actor["年龄"])
# 尝试Set List Dictionary 三者相互的添加
list1.append(actor)
print(list1)

# 无法在set集合中添加dictionary字典对象
# set1.add(actor)
# print(set1)

# 打印输出python的关键字
# import keyword
#
# print(keyword.kwlist)
# print("python中关键字的个数：", len(keyword.kwlist))
# print("判断某个变量名是否是关键字：", keyword.iskeyword("int"))

# 使用高精度小数
import decimal

num5 = decimal.Decimal('3.1415926535897924')
# 可以手动设置小数的精度
# decimal.getcontext().prec = 120
print(num5 ** 2)


